<template>
    <div>
        <h4>- Symbol ：新的原始数据类型，一种类似于字符串的数据类型，表示独一无二的值 可以保证对象的属性不被改写或覆盖</h4>
        <p>可以传入一个参数，仅用来表示对当前 Symbol 值的描述（ES2019可以利用Symbol.prototype.description来获取这个描述），利于区分，相同参数的Symbol函数的返回值是不相等的；不能与其他类型的值进行运算，但是，Symbol 值可以显式转为字符串 和布尔值：<code>let sym = Symbol('my'); String(sym) //'Symbol(My symbol)' ;Boolean(sym) //true ;!sym //false</code></p>
        <h4>- Symbol 作为属性名</h4>
        <code>必须使用方括号解构：let a = {};a[mySymbol] = 'Hello!'; 采用 点结构会使得这个symbol被当成字符串；symbol还可以用于定义一组常量，保证这组常量的值都是不相等的</code>
        <h4>- Symbol.for() 接受一个字符串作为参数，如果有以该参数作为名称的 Symbol 就返回这个 Symbol ，否则就新建并返回一个以该字符串为名称的 Symbol ，这个方法会在全局登记 而Symbol()不会登记，Symbol.keyFor()返回一个已登记的 Symbol 类型值的key</h4>
        <code>Symbol.for("bar") === Symbol.for("bar") //true；Symbol("bar") === Symbol("bar") //false</code>
        <h4>- 内置的 Symbol 值 指向 语言内部</h4>
        <p>对象的 Symbol.hasInstance 属性：指向一个内部方法 定制使用instanceof运算符时进行的操作</p>
        <p>对象的 Symbol.isConcatSpreadable 属性：布尔值，表示该对象用于Array.prototype.concat()时，是否可以展开（默认展开）</p>
        <p>对象的 Symbol.species 属性，指向一个构造函数</p>
        <p>对象的 Symbol.match 属性当执行str.match(myObject)时，如果该属性存在，会调用它，返回该方法的返回值。类似的还有：Symbol.replace、Symbol.search、Symbol.split</p>
        <p>对象的 Symbol.iterator 属性，指向该对象的默认遍历器方法，对象进行for...of循环时，会调用Symbol.iterator方法</p>
        <p>对象的 Symbol.toPrimitive 属性，指向一个方法。该对象被转为原始类型的值时，会调用这个方法，返回该对象对应的原始类型值。</p>
        <p>对象的Symbol.toStringTag属性，指向一个方法。在该对象上面调用Object.prototype.toString方法时，如果这个属性存在，它的返回值会出现在toString方法返回的字符串之中，表示对象的类型。这个属性可以用来定制[object Object]或[object Array]中object后面的那个字符串。</p>
    </div>
</template>

<script>
export default {
    
}
</script>

<style scoped>

</style>